home *** CD-ROM | disk | FTP | other *** search
/ Greenhouse Effect Detection Expriment / NASA Greenhouse Effect Detection Expriment 1992 - Disc 2.iso / software / dos / cdf22pc / src / lib / cdflib.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-28  |  3.9 KB  |  163 lines

  1. /******************************************************************************
  2. *
  3. *  NSSDC/CDF                    INTERNAL interface to CDF.
  4. *
  5. *  Version 2.3, 14-Feb-92, ST Systems (STX)
  6. *
  7. *  Modification history:
  8. *
  9. *   V1.0  22-Jan-91, R Kulkarni/J Love    Original version (for CDF V2.0).
  10. *
  11. *   V2.0   6-Jun-91, J Love        Renamed (was cdfcore.c). Modified for 
  12. *                    V2.1 style INTERNAL interface (and
  13. *                    fixes to CDF V2.0 distribution).  Also
  14. *                    renamed some symbols for clarity.
  15. *   V2.1  24-Jun-91, J Love        Fixed PUT_,VAR_INITIALRECS.  Stripped
  16. *                    trailing blanks off of CDF names. 
  17. *                    Allow variable data type to be changed
  18. *                    if "equivalent".  Added CDF_EPOCH as
  19. *                    a data type.
  20. *   V2.2   8-Aug-91, J Love        Don't use #elif (for SGi port) and
  21. *                    added support for Cray/UNICOS.
  22. *                    INTERNAL i/f function renamed 'CDFlib'.
  23. *                    Different numbers of CACHE buffers for
  24. *                    different file types (VIO).  Modified
  25. *                    hyper access (and fixed part of it).
  26. *                    Changed attribute entry access.  Check
  27. *                    for supported encoding when opening a
  28. *                    CDF.
  29. *   V2.3  14-Feb-92, J Love        Changed for IBM-PC port (split into
  30. *                    smaller source files, etc.).  Renamed
  31. *                    global variables.
  32. *
  33. ******************************************************************************/
  34.  
  35. #define CDFLIB    1        /* This should only be defined in one of the
  36.                    CDF library source files. */
  37.  
  38. #include "cdflib.h"
  39.  
  40. /******************************************************************************
  41. *  Interface to CDF internal structures and data/meta-data.
  42. ******************************************************************************/
  43.  
  44. #if !defined(__MSDOS__)
  45. CDFstatus CDFlib (va_alist)
  46. va_dcl
  47. #else
  48. CDFstatus CDFlib (long requiredFnc, ...)
  49. #endif
  50. {
  51. va_list ap;
  52. long item;
  53. long fnc;
  54. CDFstatus Pstatus = CDF_OK;
  55. CDFstatus Tstatus;
  56.  
  57. #if defined(__MSDOS__)
  58. va_start(ap, requiredFnc);
  59. #else
  60. va_start(ap);
  61. #endif
  62.  
  63. /******************************************************************************
  64. *  Reset "current" CDF and "current" CDFstatus.
  65. ******************************************************************************/
  66.  
  67. _CURcdf = NULL;
  68. _CURstatus = RESERVED_CDFSTATUS;
  69.  
  70. /******************************************************************************
  71. *  Process variable length argument list.
  72. ******************************************************************************/
  73.  
  74. #if defined(__MSDOS__)
  75. fnc = requiredFnc;
  76. #else
  77. fnc = va_arg (ap,long);
  78. #endif
  79.  
  80. while (fnc != NULL_) {
  81.   switch (fnc) {
  82.     case CREATE_:
  83.       for (;;) {
  84.      item = va_arg (ap, long);
  85.      Tstatus = CDFcre (&ap, item, &fnc);
  86.      STATUSdisp (Tstatus, Pstatus);
  87.      if (fnc == item) break;
  88.       }
  89.       break;
  90.  
  91.     case OPEN_:
  92.       for (;;) {
  93.      item = va_arg (ap, long);
  94.      Tstatus = CDFope (&ap, item, &fnc);
  95.      STATUSdisp (Tstatus, Pstatus);
  96.      if (fnc == item) break;
  97.       }
  98.       break;
  99.  
  100.     case DELETE_:
  101.       for (;;) {
  102.      item = va_arg (ap, long);
  103.      Tstatus = CDFdel (item, &fnc);
  104.      STATUSdisp (Tstatus, Pstatus);
  105.      if (fnc == item) break;
  106.       }
  107.       break;
  108.  
  109.     case CLOSE_:
  110.       for (;;) {
  111.      item = va_arg (ap, long);
  112.      Tstatus = CDFclo (item, &fnc);
  113.      STATUSdisp (Tstatus, Pstatus);
  114.      if (fnc == item) break;
  115.       }
  116.       break;
  117.  
  118.     case SELECT_:
  119.       for (;;) {
  120.      item = va_arg (ap, long);
  121.      Tstatus = CDFsel (&ap, item, &fnc);
  122.      STATUSdisp (Tstatus, Pstatus);
  123.      if (fnc == item) break;
  124.       }
  125.       break;
  126.  
  127.      case CONFIRM_:
  128.        for (;;) {
  129.       item = va_arg (ap, long);
  130.       Tstatus = CDFcon (&ap, item, &fnc);
  131.       STATUSdisp (Tstatus, Pstatus);
  132.       if (fnc == item) break;
  133.        }
  134.        break;
  135.  
  136.      case GET_:
  137.        for (;;) {
  138.       item = va_arg (ap, long);
  139.       Tstatus = CDFget (&ap, item, &fnc);
  140.       STATUSdisp (Tstatus, Pstatus);
  141.       if (fnc == item) break;
  142.        }
  143.        break;
  144.  
  145.     case PUT_:
  146.       for (;;) {
  147.      item = va_arg (ap, long);
  148.      Tstatus = CDFput (&ap, item, &fnc);
  149.      STATUSdisp (Tstatus, Pstatus);
  150.      if (fnc == item) break;
  151.       }
  152.       break;
  153.  
  154.     default: {
  155.       va_end (ap);
  156.       return BAD_FNC_OR_ITEM;
  157.     }
  158.   }
  159. }
  160. va_end (ap);
  161. return Pstatus;
  162. }
  163.